package com.kinyx.framework.log;

import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;

/**
 * 日志对象定义
 */
@RequiredArgsConstructor(access = AccessLevel.PROTECTED)
public abstract class Log {

	/** 输出日志所在的类类型 */
	protected final Class<?> clazz;

	/**
	 * trace级别是否可用
	 * @return true: 可用; false: 不可用;
	 */
	public abstract boolean isTraceEnabled();

	/**
	 * debug级别是否可用
	 * @return true: 可用; false: 不可用;
	 */
	public abstract boolean isDebugEnabled();

	/**
	 * info级别是否可用
	 * @return true: 可用; false: 不可用;
	 */
	public abstract boolean isInfoEnabled();

	/**
	 * warn级别是否可用
	 * @return true: 可用; false: 不可用;
	 */
	public abstract boolean isWarnEnabled();

	/**
	 * error级别是否可用
	 * @return true: 可用; false: 不可用;
	 */
	public abstract boolean isErrorEnabled();

	/**
	 * fatal级别是否可用
	 * @return true: 可用; false: 不可用;
	 */
	public abstract boolean isFatalEnabled();

	/**
	 * 输出日志
	 * @param message 日志信息
	 */
	public abstract void trace(Object message);

	/**
	 * 输出日志
	 * @param message 日志信息
	 */
	public abstract void debug(Object message);

	/**
	 * 输出日志
	 * @param message 日志信息
	 */
	public abstract void info(Object message);

	/**
	 * 输出日志
	 * @param message 日志信息
	 */
	public abstract void warn(Object message);

	/**
	 * 输出日志
	 * @param message 日志信息
	 */
	public abstract void error(Object message);

	/**
	 * 输出日志
	 * @param message 日志信息
	 */
	public abstract void fatal(Object message);

	/**
	 * 输出日志
	 * @param message 日志信息
	 * @param t 异常对象
	 */
	public abstract void trace(Object message, Throwable t);

	/**
	 * 输出日志
	 * @param message 日志信息
	 * @param t 异常对象
	 */
	public abstract void debug(Object message, Throwable t);

	/**
	 * 输出日志
	 * @param message 日志信息
	 * @param t 异常对象
	 */
	public abstract void info(Object message, Throwable t);

	/**
	 * 输出日志
	 * @param message 日志信息
	 * @param t 异常对象
	 */
	public abstract void warn(Object message, Throwable t);

	/**
	 * 输出日志
	 * @param message 日志信息
	 * @param t 异常对象
	 */
	public abstract void error(Object message, Throwable t);

	/**
	 * 输出日志
	 * @param message 日志信息
	 * @param t 异常对象
	 */
	public abstract void fatal(Object message, Throwable t);

}
